package com.ruoyi.distributor.domain;

import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.wallet.domain.DistributionWallet;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 分销用户信息对象 wdmd_distribution_user
 * 
 * @author ruoyi
 * @date 2025-10-11
 */
@Data
public class DistributionUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 分销员ID */
    private Long distributorId;

    /** 用户ID */
    @Excel(name = "用户ID")
    private Long userId;

    /** 分销员编号(DSN开头) */
    @Excel(name = "分销员编号(DSN开头)")
    private String distributorCode;

    /** 真实姓名 */
    @Excel(name = "真实姓名")
    private String realName;

    /** 手机号 */
    @Excel(name = "手机号")
    private String mobile;

    /** 身份证号 */
    @Excel(name = "身份证号")
    private String identityCard;

    /** 当前等级ID */
    @Excel(name = "当前等级ID")
    private Long gradeId;

    /** 上级分销员ID(0表示无上级) */
    @Excel(name = "上级分销员ID(0表示无上级)")
    private Long fatherId;

    /** 团队总人数 */
    @Excel(name = "团队总人数")
    private Long teamCount;

    /** 直接下级人数 */
    @Excel(name = "直接下级人数")
    private Long directCount;

    /** 成为分销员时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "成为分销员时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date bindTime;

    /** 最后登录时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date lastLoginTime;

    /** 状态（0=上架 1=下架） */
    @Excel(name = "状态", readConverterExp = "0==上架,1==下架")
    private String status;

    /** 删除标志（0存在 2删除） */
    private String delFlag;

    /** 版本号（乐观锁） */
    private Long version;

    /** 认证审核状态 */
    private String authStatus;

    /** 分销等级名称 */
    private String gradeName;

    /** 分销钱包列表 */
    private List<DistributionWallet> distributionWalletList;

    /**
     * 分销员基础信息DTO
     */
    @Data
    public static class DistributorBasicInfo {
        /** 分销员ID */
        private Long distributorId;

        /** 真实姓名 */
        private String realName;
    }

    /** 分销员二维码地址 */
    private String qrUrl;


    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("distributorId", getDistributorId())
            .append("userId", getUserId())
            .append("distributorCode", getDistributorCode())
            .append("realName", getRealName())
            .append("mobile", getMobile())
            .append("identityCard", getIdentityCard())
            .append("gradeId", getGradeId())
            .append("fatherId", getFatherId())
            .append("teamCount", getTeamCount())
            .append("directCount", getDirectCount())
            .append("bindTime", getBindTime())
            .append("lastLoginTime", getLastLoginTime())
            .append("status", getStatus())
            .append("delFlag", getDelFlag())
            .append("version", getVersion())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("createBy", getCreateBy())
            .append("updateBy", getUpdateBy())
            .append("remark", getRemark())
            .append("authStatus", getAuthStatus())
            .append("gradeName", getGradeName())
            .append("distributionWalletList", getDistributionWalletList())
            .append("qrUrl", getQrUrl())
            .toString();
    }
}
